#ifndef PLAYLISTGUIFACTORY_H
#define PLAYLISTGUIFACTORY_H

#include <QObject>

class QBoxLayout;
class QLayout;
class QWidget;
class IF_MediaEngineInterface;
class IF_PictureEngineInterface;
class MediaListModel;
class AudioVideoAutomation;
class PictureAutomation;
class MediaPositionSlider;
class VolumeSlider;
class FullScreenVideoWidget;
class AudioVideoPlayBar;
class PicturePlaybar;
class PlaylistBar;
class ActionListView;
class QAbstractListModel;
class ActionListController;
class FileInport;

/**
 * @brief The PlaylistGuiFactory class generates media widgets to
 * interact with a media content. Each build function takes a QWidget
 * in input that is used for parenting, (and automatic deletion), but
 * not for positioning in screen, that is demanded to caller
 */

class PlaylistGuiFactory : public QObject
{
public:
   explicit PlaylistGuiFactory(QObject *parent = 0);

   MediaPositionSlider *buildSeekbar(IF_MediaEngineInterface *engine, QWidget *parent);
   VolumeSlider *buildVolumeBar(IF_MediaEngineInterface *engine, QBoxLayout *container);
   AudioVideoPlayBar *buildAudioVideoPlaybar( IF_MediaEngineInterface *engine, QWidget *parent);
   PicturePlaybar *buildPicturePlaybar( IF_PictureEngineInterface *engine, QWidget *parent);
   PlaylistBar * buildPlaylistBar( AudioVideoPlayBar * audioVideoBar,
                                   PicturePlaybar * pictureBar, MediaListModel * mediaList,
                                   QWidget * parent);
   ActionListView *buildPlaylistView( PlaylistBar * playbar, QAbstractListModel *model,
                                     ActionListController *actionController, QWidget *parent);
   void buildPlaylistPanel( IF_MediaEngineInterface *engine, AudioVideoAutomation *automation,
                            ActionListView *playlistView,
                            FileInport *fileInport, QLayout *container);
};

#endif // PLAYLISTGUIFACTORY_H
